home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2004 #2
/
Amiga Plus CD - 2004 - No. 02.iso
/
AmiSoft
/
Misc
/
emu
/
Wzonka-Lad.lha
/
Wzonka-Lad
/
src
/
z80_crippled_I.s
< prev
next >
Wrap
Text File
|
2003-08-11
|
190KB
|
6,699 lines
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; gb-z80 processor emulator, gameboy edition for Wzonka-Lad
; (c) 1996-1999 Ville Helin
;
; If you find places for bugfixes and report them first,
; you'll get yourself a key, and one for your friend as well.
;
; Bug reports, etc. to vhelin@cc.hut.fi
;
; INPUT:
; d0 = 0.W, d.B, e.B.
; d1 = 0.W, b.B, c.B.
; d2 = 0.W, h.B, l.B.
; d3 = 0.W, f.B, a.B.
; d4 = 0.W, ccr.W.
; d5 = 0.W, sp.W.
; a0 = pointer to z80 code.
; a1 = base pointer to the z80 jump table.
; a2 = base pointer to gameboy memory.
; a3 = base pointer to rom switched area.
; a4 = base pointer to the z80 $cb jump table.
; a5 = the amount of cycles to do.
; NOTE:
; f is emulated through amiga's own status register,
; so it is not stored as z80's status register, but
; a conversion is always executed when needed (rarely).
; h = half carry flag.
; n = substraction .
; z = zero .
; c = carry .
; f = 000xnzvc (680x0) .
; = znhc0000 (z80)(gb).
; 680x0 flags = xnzvc--.
; z80(gb) flags = --z-cnh.
; f = 0nhxnzvc (680x0 + emulated xx.B n.6 & h.5).
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; a normal cpu sweep begins here
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
cnop 0,4
z80_cpu_sweep: move.l z80_cycles,a5 ;a5 = cycles to do.
moveq.l #0,d7
fetch_next_i
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; the z80 instruction jump table
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
cnop 0,128
z80_jump_table:
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 00 - NOP
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_00: subq.l #1,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; the z80 extended ($cbxx) instruction jump table (interleacved
; with the z80 $xx jumps)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_jump_tbl_cb:
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB00 - RLC B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB00: ror.w #8,d1
subq.l #2,a5
rol.b #1,d1
move.w CCR,d4
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 01 - LD BC, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_01: move.w (a0)+,d1
subq.l #3,a5
ror.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB01 - RLC C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB01: subq.l #2,a5
rol.b #1,d1
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 02 - LD (BC), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_02: subq.l #2,a5
move.l gb_mem_jumps,a6
move.w d1,d7
move.b d3,d6
jsr ([a6,d1.l*4])
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB02 - RLC D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB02: ror.w #8,d0
subq.l #2,a5
rol.b #1,d0
move.w CCR,d4
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 03 - INC BC
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_03: subq.l #2,a5
addq.w #1,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB03 - RLC E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB03: subq.l #2,a5
rol.b #1,d0
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 04 - INC B - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_04: ror.w #8,d1
subq.l #1,a5
addq.b #1,d1
beq.s z80_optcode_04_z
rol.w #8,d1
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_04_z:
rol.w #8,d1
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB04 - RLC H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB04: ror.w #8,d2
subq.l #2,a5
rol.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 05 - DEC B - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_05: ror.w #8,d1
subq.l #1,a5
subq.b #1,d1
beq.s z80_optcode_05_z
and.b #%1,d4 ;z = 0.
rol.w #8,d1
fetch_next_i
cnop 0,4
z80_optcode_05_z:
or.b #%100,d4 ;z = 1.
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB05 - RLC L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB05: subq.l #2,a5
rol.b #1,d2
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 06 - LD B, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_06: ror.w #8,d1
subq.l #2,a5
move.b (a0)+,d1
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB06 - RLC (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB06: move.b (a2,d2.l),d6
subq.l #4,a5
rol.b #1,d6
move.w CCR,d4
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 07 - RLCA - [n = 0, h = 0, c = x, z = 0]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_07: rol.b #1,d3
move.w CCR,d4
subq.l #1,a5
and.b #%1,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB07 - RLC A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB07: subq.l #2,a5
rol.b #1,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 08 - LD (xx), SP
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_08: move.w (a0)+,d7
move.w d5,d6
ror.w #8,d7
ror.w #8,d6
subq.l #5,a5
move.w d6,(a2,d7.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB08 - RRC B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB08: ror.w #8,d1
subq.l #2,a5
ror.b #1,d1
move.w CCR,d4
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 09 - ADD HL, BC - [n = 0, h = ?, c = x, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_09: add.w d1,d2
move.w CCR,d7
and.b #%11111110,d4
and.b #%1,d7
subq.l #2,a5
or.b d7,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB09 - RRC C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB09: subq.l #2,a5
ror.b #1,d1
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 0A - LD A, (BC)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_0A: subq.l #2,a5
tst.w d1 ;rom read?
blt.s read_d1_to_d3ax ;nope. from ram!
move.b (a3,d1.l),d3
fetch_next_i
cnop 0,4
read_d1_to_d3ax:move.b (a2,d1.l),d3 ;ram read.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB0A - RRC D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB0A: ror.w #8,d0
subq.l #2,a5
ror.b #1,d0
move.w CCR,d4
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 0B - DEC BC
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_0B: subq.l #2,a5
subq.w #1,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB0B - RRC E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB0B: subq.l #2,a5
ror.b #1,d0
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 0C - INC C - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_0C: subq.l #1,a5
addq.b #1,d1
beq.s z80_optcode_0C_z
and.b #%1,d4
fetch_next_i
cnop 0,4
z80_optcode_0C_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB0C - RRC H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB0C: ror.w #8,d2
subq.l #2,a5
ror.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 0D - DEC C - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_0D: subq.l #1,a5
subq.b #1,d1
beq.s z80_optcode_0D_z
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_0D_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB0D - RRC L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB0D: subq.l #2,a5
ror.b #1,d2
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 0E - LD C, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_0E: subq.l #2,a5
move.b (a0)+,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB0E - RRC (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB0E: move.b (a2,d2.l),d6
subq.l #4,a5
ror.b #1,d6
move.w CCR,d4
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 0F - RRCA - [n = 0, h = 0, c = x, z = 0]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_0F: ror.b #1,d3
move.w CCR,d4
subq.l #1,a5
and.b #%1,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB0F - RRC A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB0F: subq.l #2,a5
ror.b #1,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 10 - STOP (+ 00.B?)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_10: move.b #1,z80_halt ;z80 halted!
rts
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB10 - RL B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB10: subq.l #2,a5
lsl.b #4,d4 ;c = mc680x0's x!
ror.w #8,d1
move.w d4,CCR
roxl.b #1,d1
move.w CCR,d4
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 11 - LD DE, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_11: move.w (a0)+,d0
subq.l #3,a5
ror.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB11 - RL C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB11: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxl.b #1,d1
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 12 - LD (DE), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_12: move.l gb_mem_jumps,a6
subq.l #2,a5
move.w d0,d7
move.b d3,d6
jsr ([a6,d0.l*4])
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB12 - RL D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB12: subq.l #2,a5
lsl.b #4,d4 ;c = mc680x0's x!
ror.w #8,d0
move.w d4,CCR
roxl.b #1,d0
move.w CCR,d4
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 13 - INC DE
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_13: subq.l #2,a5
addq.w #1,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB13 - RL E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB13: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxl.b #1,d0
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 14 - INC D - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_14: ror.w #8,d0
subq.l #1,a5
addq.b #1,d0
beq.s z80_optcode_14_z
and.b #%1,d4 ;z = 0.
rol.w #8,d0
fetch_next_i
cnop 0,4
z80_optcode_14_z:
or.b #%100,d4 ;z = 1.
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB14 - RL H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB14: subq.l #2,a5
lsl.b #4,d4 ;c = mc680x0's x!
ror.w #8,d2
move.w d4,CCR
roxl.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 15 - DEC D - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_15: ror.w #8,d0
subq.l #1,a5
subq.b #1,d0
beq.s z80_optcode_15_z
and.b #%1,d4 ;z = 0.
rol.w #8,d0
fetch_next_i
cnop 0,4
z80_optcode_15_z:
or.b #%100,d4 ;z = 1.
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB15 - RL L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB15: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxl.b #1,d2
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 16 - LD D, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_16: ror.w #8,d0
subq.l #2,a5
move.b (a0)+,d0
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB16 - RL (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB16: subq.l #4,a5
lsl.b #4,d4 ;c = mc680x0's x!
move.b (a2,d2.l),d6
move.w d4,CCR
roxl.b #1,d6
move.w CCR,d4
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 17 - RLA - [n = 0, h = 0, c = x, z = 0]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_17: lsl.b #4,d4
subq.l #1,a5
move.w d4,CCR
roxl.b #1,d3
move.w CCR,d4
and.b #%1,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB17 - RL A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB17: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxl.b #1,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 18 - JR x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_18: move.b (a0)+,d7
ext.w d7
subq.l #2,a5
adda.w d7,a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB18 - RR B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB18: subq.l #2,a5
lsl.b #4,d4 ;c = mc680x0's x!
ror.w #8,d1
move.w d4,CCR
roxr.b #1,d1
move.w CCR,d4
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 19 - ADD HL, DE - [n = 0, h = ?, c = x, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_19: add.w d0,d2
move.w CCR,d7
and.b #%11111110,d4
and.b #%1,d7
subq.l #2,a5
or.b d7,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB19 - RR C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB19: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxr.b #1,d1
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 1A - LD A, (DE)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_1A: subq.l #2,a5
tst.w d0
blt.s read_d0x_to_d3a
move.b (a3,d0.l),d3 ;rom read.
fetch_next_i
cnop 0,4
read_d0x_to_d3a:move.b (a2,d0.l),d3 ;ram read.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB1A - RR D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB1A: subq.l #2,a5
lsl.b #4,d4 ;c = mc680x0's x!
ror.w #8,d0
move.w d4,CCR
roxr.b #1,d0
move.w CCR,d4
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 1B - DEC DE
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_1B: subq.l #2,a5
subq.w #1,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB1B - RR E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB1B: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxr.b #1,d0
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 1C - INC E - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_1C: subq.l #1,a5
addq.b #1,d0
beq.s z80_optcode_1C_z
and.b #1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_1C_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB1C - RR H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB1C: subq.l #2,a5
lsl.b #4,d4 ;c = mc680x0's x!
ror.w #8,d2
move.w d4,CCR
roxr.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 1D - DEC E - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_1D: subq.l #1,a5
subq.b #1,d0
beq.s z80_optcode_1D_z
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_1D_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB1D - RR L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB1D: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxr.b #1,d2
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 1E - LD E, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_1E: subq.l #2,a5
move.b (a0)+,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB1E - RR (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB1E: subq.l #4,a5
lsl.b #4,d4 ;c = mc680x0's x!
move.b (a2,d2.l),d6
move.w d4,CCR
roxr.b #1,d6
move.w CCR,d4
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 1F - RRA - [n = 0, h = 0, c = x, z = 0]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_1F: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #1,a5
move.w d4,CCR
roxr.b #1,d3
move.w CCR,d4
and.b #%1,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB1F - RR A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB1F: lsl.b #4,d4 ;c = mc680x0's x!
subq.l #2,a5
move.w d4,CCR
roxr.b #1,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 20 - JR NZ, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_20: subq.l #2,a5
btst #2,d4 ;z - flag set?
bne.s z80_optcode_20x ;yes. it's zero.
move.b (a0)+,d7
ext.w d7 ;.B -> .W.
adda.w d7,a0 ;pc updated.
fetch_next_i
cnop 0,4
z80_optcode_20x:addq.l #1,a0 ;no jump.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB20 - SLA B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB20: ror.w #8,d1
subq.l #2,a5 ;less cycles.
asl.b #1,d1
move.w CCR,d4 ;status updated.
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 21 - LD HL, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_21: move.w (a0)+,d2
subq.l #3,a5 ;less cycles.
ror.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB21 - SLA C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB21: subq.l #2,a5 ;less cycles.
asl.b #1,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 22 - LDI (HL), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_22: move.b d3,(a2,d2.l)
subq.l #2,a5 ;less cycles.
addq.w #1,d2 ;ldi to hl.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB22 - SLA D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB22: ror.w #8,d0 ;d down.
subq.l #2,a5 ;less cycles.
asl.b #1,d0
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 23 - INC HL
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_23: subq.l #2,a5 ;less cycles.
addq.w #1,d2 ;hl = hl + 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB23 - SLA E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB23: subq.l #2,a5 ;less cycles.
asl.b #1,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 24 - INC H - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_24: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
addq.b #1,d2 ;h = h + 1.
beq.s z80_optcode_24_z
and.b #%1,d4 ;z = 0.
rol.w #8,d2
fetch_next_i
cnop 0,4
z80_optcode_24_z:
or.b #%100,d4 ;z = 1.
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB24 - SLA H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB24: ror.w #8,d2
subq.l #2,a5
asl.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 25 - DEC H - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_25: ror.w #8,d2
subq.l #1,a5
subq.b #1,d2 ;h = h - 1.
beq.s z80_optcode_25_z
and.b #%1,d4 ;z = 0.
rol.w #8,d2
fetch_next_i
cnop 0,4
z80_optcode_25_z:
or.b #%100,d4 ;z = 1.
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB25 - SLA L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB25: subq.l #2,a5 ;less cycles.
asl.b #1,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 26 - LD H, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_26: ror.w #8,d2 ;h down
subq.l #2,a5 ;less cycles.
move.b (a0)+,d2
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB26 - SLA (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB26: move.b (a2,d2.l),d6
subq.l #4,a5 ;less cycles.
asl.b #1,d6
move.w CCR,d4 ;status updated.
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 27 - DAA - [n = n, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_27: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB27 - SLA A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB27: subq.l #2,a5 ;less cycles.
asl.b #1,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 28 - JR Z, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_28: subq.l #2,a5
btst #2,d4 ;z - flag set?
beq.s z80_optcode_28x ;nope. it's non-zero.
move.b (a0)+,d7
ext.w d7 ;.B -> .W.
adda.w d7,a0 ;pc updated.
fetch_next_i
cnop 0,4
z80_optcode_28x:addq.l #1,a0 ;no jump.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB28 - SRA B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB28: ror.w #8,d1
subq.l #2,a5 ;less cycles.
asr.b #1,d1
move.w CCR,d4 ;status updated.
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 29 - ADD HL, HL - [n = 0, h = ?, c = x, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_29: add.w d2,d2 ;hl = hl + hl.
move.w CCR,d7 ;status updated.
and.b #%11111110,d4 ;save z.
and.b #%1,d7 ;save c.
subq.l #2,a5 ;less cycles.
or.b d7,d4 ;return z.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB29 - SRA C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB29: subq.l #2,a5 ;less cycles.
asr.b #1,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 2A - LDI A, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_2A: subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2_to_d3a1 ;nope. from ram!
move.b (a3,d2.l),d3
addq.w #1,d2 ;ldi a, (hl).
fetch_next_i
cnop 0,4
read_d2_to_d3a1:move.b (a2,d2.l),d3 ;ram read.
addq.w #1,d2 ;ldi a, (hl).
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB2A - SRA D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB2A: ror.w #8,d0
subq.l #2,a5
asr.b #1,d0
move.w CCR,d4
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 2B - DEC HL
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_2B: subq.l #2,a5
subq.w #1,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB2B - SRA E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB2B: subq.l #2,a5
asr.b #1,d0
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 2C - INC L - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_2C: subq.l #1,a5
addq.b #1,d2
beq.s z80_optcode_2C_z
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_2C_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB2C - SRA H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB2C: ror.w #8,d2
subq.l #2,a5
asr.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 2D - DEC L - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_2D: subq.l #1,a5
subq.b #1,d2
beq.s z80_optcode_2D_z
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_2D_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB2D - SRA L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB2D: subq.l #2,a5
asr.b #1,d2
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 2E - LD L, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_2E: subq.l #2,a5
move.b (a0)+,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB2E - SRA (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB2E: move.b (a2,d2.l),d6
subq.l #4,a5
asr.b #1,d6
move.w CCR,d4
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 2F - CPL - [n = 1, h = 1, c = c, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_2F: subq.l #1,a5
eor.b #$ff,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB2F - SRA A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB2F: subq.l #2,a5
asr.b #1,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 30 - JR NC, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_30: subq.l #2,a5
btst #0,d4 ;c - flag set?
bne.s z80_optcode_30x ;yes. no jump.
move.b (a0)+,d7
ext.w d7 ;.B -> .W.
adda.w d7,a0 ;pc updated.
fetch_next_i
cnop 0,4
z80_optcode_30x:addq.l #1,a0 ;skip jump.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB30 - SWAP B - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB30: ror.w #8,d1 ;b down.
subq.l #2,a5 ;less cycles.
ror.b #4,d1 ;swap nibbles.
move.w CCR,d4
rol.w #8,d1 ;b back up.
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 31 - LD SP, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_31: move.w (a0)+,d5
subq.l #3,a5
ror.w #8,d5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB31 - SWAP C - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB31: ror.b #4,d1 ;swap nibbles.
move.w CCR,d4
subq.l #2,a5
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 32 - LDD (HL), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_32: move.b d3,(a2,d2.l)
subq.l #2,a5
subq.w #1,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB32 - SWAP D - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB32: ror.w #8,d0 ;d down.
subq.l #2,a5 ;less cycles.
ror.b #4,d0 ;swap nibbles.
move.w CCR,d4
rol.w #8,d0 ;d back up.
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 33 - INC SP
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_33: subq.l #2,a5
addq.w #1,d5 ;sp = sp + 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB33 - SWAP E - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB33: ror.b #4,d0 ;swap nibbles.
move.w CCR,d4
subq.l #2,a5
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 34 - INC (HL) - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_34: addq.b #1,(a2,d2.l)
move.w CCR,d7 ;status updated.
and.b #%1,d4 ;save carry.
and.b #%11111110,d7 ;c = 0.
subq.l #3,a5
or.b d7,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB34 - SWAP H - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB34: ror.w #8,d2 ;h down.
subq.l #2,a5
ror.b #4,d2
move.w CCR,d4
rol.w #8,d2 ;h back up.
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 35 - DEC (HL) - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_35: subq.b #1,(a2,d2.l)
move.w CCR,d7
and.b #%1,d4
and.b #%11111110,d7
subq.l #3,a5
or.b d7,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB35 - SWAP L - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB35: ror.b #4,d2 ;swap nibbles.
move.w CCR,d4
subq.l #2,a5
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 36 - LD (HL), x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_36: subq.l #3,a5
move.b (a0)+,d6
move.l gb_mem_jumps,a6
move.w d2,d7 ;d7 = a (hl) - write.
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB36 - SWAP (HL) - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB36: move.b (a2,d2.l),d6
subq.l #4,a5 ;less cycles.
ror.b #4,d6 ;swap nibbles.
move.w CCR,d4
move.b d6,(a2,d2.l)
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 37 - SCF - [n = 0, h = 0, c = 1, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_37: subq.l #1,a5 ;less cycles.
or.b #%00000001,d4 ;set carry flag.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB37 - SWAP A - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB37: ror.b #4,d3 ;swap nibbles.
move.w CCR,d4
subq.l #2,a5
and.b #%100,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 38 - JR C, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_38: subq.l #2,a5
btst #0,d4 ;c - flag set?
beq.s z80_optcode_38x ;no. no jump.
move.b (a0)+,d7
ext.w d7 ;.B -> .W.
adda.w d7,a0 ;pc updated.
fetch_next_i
cnop 0,4
z80_optcode_38x:addq.l #1,a0 ;skip jump.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB38 - SRL B - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB38: ror.w #8,d1
subq.l #2,a5
lsr.b #1,d1
move.w CCR,d4
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 39 - ADD HL, SP - [n = 0, h = ?, c = x, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_39: add.w d5,d2 ;hl = hl + sp.
move.w CCR,d7 ;status updated.
and.b #%11111110,d4 ;save z.
and.b #%1,d7 ;save carry.
subq.l #2,a5 ;less cycles.
or.b d7,d4 ;return z.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB39 - SRL C - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB39: subq.l #2,a5
lsr.b #1,d1
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 3A - LDD A, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_3A: subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2_to_d3a2 ;nope. from ram!
move.b (a3,d2.l),d3
subq.w #1,d2 ;ldd a, (hl).
fetch_next_i
cnop 0,4
read_d2_to_d3a2:move.b (a2,d2.l),d3 ;ram read.
subq.w #1,d2 ;ldd a, (hl).
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB3A - SRL D - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB3A: ror.w #8,d0
subq.l #2,a5
lsr.b #1,d0
move.w CCR,d4
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 3B - DEC SP
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_3B: subq.l #2,a5
subq.w #1,d5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB3B - SRL E - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB3B: subq.l #2,a5
lsr.b #1,d0
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 3C - INC A - [n = 0, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_3C: subq.l #1,a5
addq.b #1,d3
beq.s z80_optcode_3C_z
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_3C_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB3C - SRL H - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB3C: ror.w #8,d2
subq.l #2,a5
lsr.b #1,d2
move.w CCR,d4
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 3D - DEC A - [n = 1, h = x, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_3D: subq.l #1,a5
subq.b #1,d3
beq.s z80_optcode_3D_z
and.b #%1,d4 ;z = 0.
fetch_next_i
cnop 0,4
z80_optcode_3D_z:
or.b #%100,d4 ;z = 1.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB3D - SRL L - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB3D: subq.l #2,a5
lsr.b #1,d2
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 3E - LD A, x
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_3E: subq.l #2,a5
move.b (a0)+,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB3E - SRL (HL) - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB3E: subq.l #4,a5
move.b (a2,d2.l),d6
lsr.b #1,d6
move.w CCR,d4
move.b d6,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 3F - CCF - [n = 0, h = 0, c = x, z = z]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_3F: subq.l #1,a5
bchg #0,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB3F - SRL A - [n = 0, h = 0, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB3F: subq.l #2,a5
lsr.b #1,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 40 - LD B, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_40: subq.l #1,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB40 - BIT 0, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB40: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #8,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 41 - LD B, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_41: move.b d1,d7
subq.l #1,a5 ;less cycles.
lsl.w #8,d1
move.b d7,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB41 - BIT 0, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB41: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #0,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 42 - LD B, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_42: move.b d1,d7
subq.l #1,a5 ;less cycles.
move.w d0,d1
move.b d7,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB42 - BIT 0, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB42: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #8,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 43 - LD B, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_43: ror.w #8,d1
subq.l #1,a5 ;less cycles.
move.b d0,d1
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB43 - BIT 0, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB43: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #0,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 44 - LD B, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_44: move.b d1,d7
subq.l #1,a5 ;less cycles.
move.w d2,d1
move.b d7,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB44 - BIT 0, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB44: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #8,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 45 - LD B, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_45: rol.w #8,d1
subq.l #1,a5 ;less cycles.
move.b d2,d1
ror.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB45 - BIT 0, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB45: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #0,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 46 - LD B, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_46: ror.w #8,d1
subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s aread_d2_to_d1a ;nope. from ram!
move.b (a3,d2.l),d1
rol.w #8,d1
fetch_next_i
cnop 0,4
aread_d2_to_d1a:move.b (a2,d2.l),d1 ;ram read.
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB46 - BIT 0, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB46: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2a_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #0,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2a_to_d7a:move.w d4,CCR ;the status register.
btst.b #0,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 47 - LD B, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_47: ror.w #8,d1
subq.l #1,a5 ;less cycles.
move.b d3,d1
rol.w #8,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB47 - BIT 0, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB47: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #0,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 48 - LD C, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_48: move.w d1,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB48 - BIT 1, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB48: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #9,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 49 - LD C, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_49: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB49 - BIT 1, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB49: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #1,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 4A - LD C, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_4A: move.w d0,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB4A - BIT 1, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB4A: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #9,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 4B - LD C, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_4B: subq.l #1,a5 ;less cycles.
move.b d0,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB4B - BIT 1, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB4B: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #1,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 4C - LD C, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_4C: move.w d2,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB4C - BIT 1, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB4C: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #9,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 4D - LD C, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_4D: subq.l #1,a5 ;less cycles.
move.b d2,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB4D - BIT 1, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB4D: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #1,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 4E - LD C, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_4E: subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s bread_d2_to_d1a ;nope. from ram!
move.b (a3,d2.l),d1
fetch_next_i
cnop 0,4
bread_d2_to_d1a:move.b (a2,d2.l),d1 ;ram read.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB4E - BIT 1, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB4E: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2b_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #1,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2b_to_d7a:move.w d4,CCR ;the status register.
btst.b #1,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 4F - LD C, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_4F: subq.l #1,a5 ;less cycles.
move.b d3,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB4F - BIT 1, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB4F: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #1,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 50 - LD D, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_50: move.b d0,d7
subq.l #1,a5 ;less cycles.
move.w d1,d0
move.b d7,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB50 - BIT 2, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB50: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #10,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 51 - LD D, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_51: ror.w #8,d0
subq.l #1,a5 ;less cycles.
move.b d1,d0
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB51 - BIT 2, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB51: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #2,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 52 - LD D, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_52: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB52 - BIT 2, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB52: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #10,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 53 - LD D, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_53: move.b d0,d7
subq.l #1,a5 ;less cycles.
lsl.w #8,d0
move.b d7,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB53 - BIT 2, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB53: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #2,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 54 - LD D, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_54: move.b d0,d7
subq.l #1,a5 ;less cycles.
move.w d2,d0
move.b d7,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB54 - BIT 2, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB54: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #10,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 55 - LD D, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_55: ror.w #8,d0
subq.l #1,a5 ;less cycles.
move.b d2,d0
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB55 - BIT 2, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB55: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #2,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 56 - LD D, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_56: ror.w #8,d0 ;d down.
subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s cread_d2_to_d0a ;nope. from ram!
move.b (a3,d2.l),d0
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,4
cread_d2_to_d0a:move.b (a2,d2.l),d0 ;ram read.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB56 - BIT 2, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB56: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2c_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #2,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2c_to_d7a:move.w d4,CCR ;the status register.
btst.b #2,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 57 - LD D, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_57: ror.w #8,d0
subq.l #1,a5 ;less cycles.
move.b d3,d0
rol.w #8,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB57 - BIT 2, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB57: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #2,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 58 - LD E, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_58: move.w d1,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB58 - BIT 3, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB58: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #11,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 59 - LD E, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_59: move.b d1,d0
subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB59 - BIT 3, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB59: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #3,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 5A - LD E, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_5A: move.w d0,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB5A - BIT 3, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB5A: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #11,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 5B - LD E, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_5B: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB5B - BIT 3, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB5B: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #3,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 5C - LD E, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_5C: move.w d2,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB5C - BIT 3, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB5C: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #11,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 5D - LD E, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_5D: subq.l #1,a5 ;less cycles.
move.b d2,d0 ;e = l.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB5D - BIT 3, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB5D: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #3,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 5E - LD E, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_5E: subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s dread_d2_to_d0a ;nope. from ram!
move.b (a3,d2.l),d0
fetch_next_i
cnop 0,4
dread_d2_to_d0a:move.b (a2,d2.l),d0 ;ram read.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB5E - BIT 3, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB5E: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2d_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #3,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2d_to_d7a:move.w d4,CCR ;the status register.
btst.b #3,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 5F - LD E, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_5F: subq.l #1,a5 ;less cycles.
move.b d3,d0 ;e = a.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB5F - BIT 3, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB5F: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #3,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 60 - LD H, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_60: move.b d2,d7
subq.l #1,a5 ;less cycles.
move.w d1,d2
move.b d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB60 - BIT 4, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB60: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #12,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 61 - LD H, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_61: ror.w #8,d2
subq.l #1,a5 ;less cycles.
move.b d1,d2
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB61 - BIT 4, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB61: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #4,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 62 - LD H, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_62: move.b d2,d7
subq.l #1,a5 ;less cycles.
move.w d0,d2
move.b d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB62 - BIT 4, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB62: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #12,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 63 - LD H, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_63: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
move.b d0,d2 ;h = e.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB63 - BIT 4, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB63: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #4,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 64 - LD H, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_64: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB64 - BIT 4, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB64: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #12,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 65 - LD H, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_65: move.b d2,d7
subq.l #1,a5 ;less cycles.
lsl.w #8,d2
move.b d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB65 - BIT 4, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB65: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #4,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 66 - LD H, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_66: move.w d2,d7 ;d7 = h.B, l.B.
subq.l #2,a5 ;less cycles.
ror.w #8,d2 ;h down.
tst.w d7
blt.s read_d7_to_d2a ;nope. from ram!
move.b (a3,d7.l),d2
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,4
read_d7_to_d2a: move.b (a2,d7.l),d2 ;ram read.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB66 - BIT 4, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB66: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2e_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #4,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2e_to_d7a:move.w d4,CCR ;the status register.
btst.b #4,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 67 - LD H, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_67: ror.w #8,d2
subq.l #1,a5 ;less cycles.
move.b d3,d2
rol.w #8,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB67 - BIT 4, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB67: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #4,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 68 - LD L, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_68: move.w d1,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB68 - BIT 5, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB68: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #13,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 69 - LD L, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_69: subq.l #1,a5 ;less cycles.
move.b d1,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB69 - BIT 5, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB69: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #5,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 6A - LD L, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_6A: move.w d0,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB6A - BIT 5, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB6A: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #13,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 6B - LD L, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_6B: subq.l #1,a5 ;less cycles.
move.b d0,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB6B - BIT 5, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB6B: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #5,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 6C - LD L, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_6C: move.w d2,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB6C - BIT 5, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB6C: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #13,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 6D - LD L, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_6D: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB6D - BIT 5, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB6D: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #5,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 6E - LD L, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_6E: subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2_to_d2a ;nope. from ram!
move.b (a3,d2.l),d2
fetch_next_i
cnop 0,4
read_d2_to_d2a: move.b (a2,d2.l),d2 ;ram read.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB6E - BIT 5, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB6E: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2f_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #5,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2f_to_d7a:move.w d4,CCR ;the status register.
btst.b #5,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 6F - LD L, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_6F: subq.l #1,a5 ;less cycles.
move.b d3,d2 ;l = a.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB6F - BIT 5, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB6F: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #5,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 70 - LD (HL), B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_70: move.w d1,d6
move.w d2,d7
lsr.w #8,d6
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB70 - BIT 6, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB70: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #14,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 71 - LD (HL), C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_71: move.b d1,d6
move.w d2,d7
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB71 - BIT 6, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB71: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #6,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 72 - LD (HL), D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_72: move.w d0,d6
move.w d2,d7
lsr.w #8,d6
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB72 - BIT 6, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB72: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #14,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 73 - LD (HL), E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_73: move.w d2,d7
move.b d0,d6
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB73 - BIT 6, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB73: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #6,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 74 - LD (HL), H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_74: move.w d2,d6
move.w d2,d7
lsr.w #8,d6
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB74 - BIT 6, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB74: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #14,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 75 - LD (HL), L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_75: move.w d2,d7
move.b d2,d6
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB75 - BIT 6, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB75: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #6,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 76 - HALT
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_76: subq.l #1,a5
tst.b i_flag
bne.s z80_optcode_76_skip
move.b #2,z80_halt ;z80 stopped!
rts
cnop 0,4
z80_optcode_76_skip:
move.l a5,d6 ;test cycles left.
ble.s f_xit_xit
IFGT GAMEBOY_DEBUG
jmp debug_output
ELSE
move.b (a0),d7
lsl.w #8,d7 ;d0 = d0*256.
jmp (a1,d7.l) ;jump and emulate.
cnop 0,4
f_xit_xit: rts
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB76 - BIT 6, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB76: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2g_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #6,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2g_to_d7a:move.w d4,CCR ;the status register.
btst.b #6,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 77 - LD (HL), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_77: move.w d2,d7
move.b d3,d6
move.l gb_mem_jumps,a6
subq.l #2,a5
jsr ([a6,d2.l*4]) ;memory write.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB77 - BIT 6, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB77: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #6,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 78 - LD A, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_78: move.w d1,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB78 - BIT 7, B - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB78: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #15,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 79 - LD A, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_79: subq.l #1,a5 ;less cycles.
move.b d1,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB79 - BIT 7, C - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB79: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #7,d1
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 7A - LD A, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_7A: move.w d0,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB7A - BIT 7, D - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB7A: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #15,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 7B - LD A, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_7B: subq.l #1,a5 ;less cycles.
move.b d0,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB7B - BIT 7, E - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB7B: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #7,d0
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 7C - LD A, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_7C: move.w d2,d7
subq.l #1,a5 ;less cycles.
lsr.w #8,d7
move.b d7,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB7C - BIT 7, H - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB7C: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #15,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 7D - LD A, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_7D: subq.l #1,a5 ;less cycles.
move.b d2,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB7D - BIT 7, L - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB7D: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #7,d2
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 7E - LD A, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_7E: subq.l #2,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2_to_d3a3 ;nope. from ram!
move.b (a3,d2.l),d3
fetch_next_i
cnop 0,4
read_d2_to_d3a3:move.b (a2,d2.l),d3 ;ram read.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB7E - BIT 7, (HL) - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB7E: subq.l #4,a5 ;less cycles.
tst.w d2 ;rom read?
blt.s read_d2h_to_d7a ;nope. from ram!
move.w d4,CCR ;the status register.
btst.b #7,(a3,d2.l)
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,4
read_d2h_to_d7a:move.w d4,CCR ;the status register.
btst.b #7,(a2,d2.l) ;ram read.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 7F - LD A, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_7F: subq.l #1,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB7F - BIT 7, A - [n = 0, h = 1, c = c, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB7F: subq.l #2,a5 ;less cycles.
move.w d4,CCR ;the status register.
btst #7,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 80 - ADD B - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_80: ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
add.b d1,d3 ;a = a + b.
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB80 - RES 0, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB80: subq.l #2,a5 ;less cycles.
and.w #%1111111011111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 81 - ADD C - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_81: subq.l #1,a5 ;less cycles.
add.b d1,d3 ;a = a + c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB81 - RES 0, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB81: subq.l #2,a5 ;less cycles.
and.b #%11111110,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 82 - ADD D - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_82: ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
add.b d0,d3 ;a = a + d.
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB82 - RES 0, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB82: subq.l #2,a5 ;less cycles.
and.w #%1111111011111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 83 - ADD E - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_83: subq.l #1,a5 ;less cycles.
add.b d0,d3 ;a = a + e.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB83 - RES 0, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB83: subq.l #2,a5 ;less cycles.
and.b #%11111110,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 84 - ADD H - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_84: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
add.b d2,d3 ;a = a + h.
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB84 - RES 0, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB84: subq.l #2,a5 ;less cycles.
and.w #%1111111011111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 85 - ADD L - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_85: subq.l #1,a5 ;less cycles.
add.b d2,d3 ;a = a + l.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB85 - RES 0, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB85: subq.l #2,a5 ;less cycles.
and.b #%11111110,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 86 - ADD (HL) - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_86:
tst.w d2
blt.s read_to_0
add.b (a3,d2.l),d3
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_0: add.b (a2,d2.l),d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB86 - RES 0, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB86: subq.l #4,a5 ;less cycles.
and.b #%11111110,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 87 - ADD A - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_87: subq.l #1,a5 ;less cycles.
add.b d3,d3 ;a = a + a.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB87 - RES 0, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB87: subq.l #2,a5 ;less cycles.
and.b #%11111110,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 88 - ADC B - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_88: btst #0,d4 ;carry?
beq.w z80_optcode_80 ;normal add.
ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d1,d3 ;a = a + b + c.
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB88 - RES 1, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB88: subq.l #2,a5 ;less cycles.
and.w #%1111110111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 89 - ADC C - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_89: btst #0,d4 ;carry?
beq.w z80_optcode_81 ;normal add.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d1,d3 ;a = a + c + c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB89 - RES 1, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB89: subq.l #2,a5 ;less cycles.
and.b #%11111101,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 8A - ADC D - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_8A: btst #0,d4 ;carry?
beq.w z80_optcode_82 ;normal add.
ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d0,d3 ;a = a + d + c.
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB8A - RES 1, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB8A: subq.l #2,a5 ;less cycles.
and.w #%1111110111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 8B - ADC E - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_8B: btst #0,d4 ;carry?
beq.w z80_optcode_83 ;normal add.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d0,d3 ;a = a + e + c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB8B - RES 1, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB8B: subq.l #2,a5 ;less cycles.
and.b #%11111101,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 8C - ADC H - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_8C: btst #0,d4 ;carry?
beq.w z80_optcode_84 ;normal add.
ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d2,d3 ;a = a + h + c.
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB8C - RES 1, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB8C: subq.l #2,a5 ;less cycles.
and.w #%1111110111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 8D - ADC L - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_8D: btst #0,d4 ;carry?
beq.w z80_optcode_85 ;normal add.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d2,d3 ;a = a + l + c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB8D - RES 1, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB8D: subq.l #2,a5 ;less cycles.
and.b #%11111101,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 8E - ADC (HL) - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_8E: btst #0,d4 ;carry?
beq.w z80_optcode_86 ;normal add.
subq.l #2,a5
tst.w d2
blt.s read_to_2
move.b (a3,d2.l),d6
move.w #%10000,CCR ;x = 1!
addx.b d6,d3 ;a = a + d + c.
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_2: move.b (a2,d2.l),d6
move.w #%10000,CCR ;x = 1!
addx.b d6,d3 ;a = a + d + c.
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB8E - RES 1, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB8E: subq.l #4,a5 ;less cycles.
and.b #%11111101,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 8F - ADC A - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_8F: btst #0,d4 ;carry?
beq.w z80_optcode_87 ;normal add.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d3,d3 ;a = a + d + c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB8F - RES 1, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB8F: subq.l #2,a5 ;less cycles.
and.b #%11111101,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 90 - SUB B - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_90: ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
sub.b d1,d3 ;a = a - b.
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB90 - RES 2, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB90: subq.l #2,a5 ;less cycles.
and.w #%1111101111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 91 - SUB C - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_91: subq.l #1,a5 ;less cycles.
sub.b d1,d3 ;a = a - c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB91 - RES 2, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB91: subq.l #2,a5 ;less cycles.
and.b #%11111011,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 92 - SUB D - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_92: ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
sub.b d0,d3 ;a = a - d.
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB92 - RES 2, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB92: subq.l #2,a5 ;less cycles.
and.w #%1111101111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 93 - SUB E - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_93: subq.l #1,a5 ;less cycles.
sub.b d0,d3 ;a = a - e.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB93 - RES 2, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB93: subq.l #2,a5 ;less cycles.
and.b #%11111011,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 94 - SUB H - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_94: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
sub.b d2,d3 ;a = a - h.
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB94 - RES 2, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB94: subq.l #2,a5 ;less cycles.
and.w #%1111101111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 95 - SUB L - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_95: subq.l #1,a5 ;less cycles.
sub.b d2,d3 ;a = a - l.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB95 - RES 2, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB95: subq.l #2,a5 ;less cycles.
and.b #%11111011,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 96 - SUB (HL) - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_96: subq.l #2,a5
tst.w d2
blt.s read_to_1
sub.b (a3,d2.l),d3
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_1: sub.b (a2,d2.l),d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB96 - RES 2, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB96: subq.l #4,a5 ;less cycles.
and.b #%11111011,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 97 - SUB A - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_97: subq.l #1,a5 ;less cycles.
sub.b d3,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB97 - RES 2, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB97: subq.l #2,a5 ;less cycles.
and.b #%11111011,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 98 - SBC B - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_98: btst #0,d4 ;c = 0?
beq.w z80_optcode_90 ;yes. normal sub.
ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d1,d3 ;a = a - b - c.
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB98 - RES 3, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB98: subq.l #2,a5 ;less cycles.
and.w #%1111011111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 99 - SBC C - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_99: btst #0,d4 ;c = 0?
beq.w z80_optcode_91 ;yes. normal sub.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d1,d3 ;a = a - c - c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB99 - RES 3, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB99: subq.l #2,a5 ;less cycles.
and.b #%11110111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 9A - SBC D - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_9A: btst #0,d4 ;c = 0?
beq.w z80_optcode_92 ;yes. normal sub.
ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d0,d3 ;a = a - d - c.
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB9A - RES 3, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB9A: subq.l #2,a5 ;less cycles.
and.w #%1111011111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 9B - SBC E - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_9B: btst #0,d4 ;c = 0?
beq.w z80_optcode_93 ;yes. normal sub.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d0,d3 ;a = a - e - c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB9B - RES 3, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB9B: subq.l #2,a5 ;less cycles.
and.b #%11110111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 9C - SBC H - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_9C: btst #0,d4 ;c = 0?
beq.w z80_optcode_94 ;yes. normal sub.
ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d2,d3 ;a = a - h - c.
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB9C - RES 3, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB9C: subq.l #2,a5 ;less cycles.
and.w #%1111011111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 9D - SBC L - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_9D: btst #0,d4 ;c = 0?
beq.w z80_optcode_95 ;yes. normal sub.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d2,d3 ;a = a - l - c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB9D - RES 3, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB9D: subq.l #2,a5 ;less cycles.
and.b #%11110111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 9E - SBC (HL) - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_9E: btst #0,d4 ;c = 0?
beq.w z80_optcode_96 ;yes. normal sub.
subq.l #2,a5
tst.w d2
blt.s read_to_3
move.b (a3,d2.l),d6
move.w #%10000,CCR ;x = 1!
subx.b d6,d3 ;a = a - d - c.
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_3: move.b (a2,d2.l),d6
move.w #%10000,CCR ;x = 1!
subx.b d6,d3 ;a = a - d - c.
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB9E - RES 3, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB9E: subq.l #4,a5 ;less cycles.
and.b #%11110111,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; 9F - SBC A - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_9F: btst #0,d4 ;c = 0?
beq.w z80_optcode_97 ;yes. normal sub.
subq.l #1,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d3,d3 ;a = a - a - c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB9F - RES 3, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CB9F: subq.l #2,a5 ;less cycles.
and.b #%11110111,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A0 - AND B - [n = 0, h = 1, c = 0, z = x]
; MC680x0 CLEARS THE CARRY FLAG ITSELF!
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A0: ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
and.b d1,d3
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA0 - RES 4, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA0: subq.l #2,a5 ;less cycles.
and.w #%1110111111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A1 - AND C - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A1: subq.l #1,a5 ;less cycles.
and.b d1,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA1 - RES 4, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA1: subq.l #2,a5 ;less cycles.
and.b #%11101111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A2 - AND D - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A2: ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
and.b d0,d3
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA2 - RES 4, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA2: subq.l #2,a5 ;less cycles.
and.w #%1110111111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A3 - AND E - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A3: subq.l #1,a5 ;less cycles.
and.b d0,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA3 - RES 4, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA3: subq.l #2,a5 ;less cycles.
and.b #%11101111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A4 - AND H - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A4: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
and.b d2,d3
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA4 - RES 4, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA4: subq.l #2,a5 ;less cycles.
and.w #%1110111111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A5 - AND L - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A5: subq.l #1,a5 ;less cycles.
and.b d2,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA5 - RES 4, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA5: subq.l #2,a5 ;less cycles.
and.b #%11101111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A6 - AND (HL) - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A6: tst.w d2
blt.s read_to_4
move.b (a3,d2.l),d6
subq.l #2,a5
and.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_4: move.b (a2,d2.l),d6
subq.l #2,a5
and.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA6 - RES 4, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA6: subq.l #4,a5 ;less cycles.
and.b #%11101111,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A7 - AND A - [n = 0, h = 1, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A7: subq.l #1,a5 ;less cycles.
and.b d3,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA7 - RES 4, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA7: subq.l #2,a5 ;less cycles.
and.b #%11101111,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A8 - XOR B - [n = 0, h = 0, c = 0, z = x]
; MC680x0 CLEARS THE CARRY FLAG ITSELF!
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A8: ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
eor.b d1,d3
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA8 - RES 5, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA8: subq.l #2,a5 ;less cycles.
and.w #%1101111111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; A9 - XOR C - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_A9: subq.l #1,a5 ;less cycles.
eor.b d1,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBA9 - RES 5, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBA9: subq.l #2,a5 ;less cycles.
and.b #%11011111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; AA - XOR D - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_AA: ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
eor.b d0,d3
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBAA - RES 5, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBAA: subq.l #2,a5 ;less cycles.
and.w #%1101111111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; AB - XOR E - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_AB: subq.l #1,a5 ;less cycles.
eor.b d0,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBAB - RES 5, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBAB: subq.l #2,a5 ;less cycles.
and.b #%11011111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; AC - XOR H - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_AC: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
eor.b d2,d3
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBAC - RES 5, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBAC: subq.l #2,a5 ;less cycles.
and.w #%1101111111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; AD - XOR L - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_AD: subq.l #1,a5 ;less cycles.
eor.b d2,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBAD - RES 5, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBAD: subq.l #2,a5 ;less cycles.
and.b #%11011111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; AE - XOR (HL) - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_AE: tst.w d2
blt.s read_to_5
move.b (a3,d2.l),d6
subq.l #2,a5
eor.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_5: move.b (a2,d2.l),d6
subq.l #2,a5
eor.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBAE - RES 5, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBAE: subq.l #4,a5 ;less cycles.
and.b #%11011111,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; AF - XOR A - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_AF: subq.l #1,a5 ;less cycles.
eor.b d3,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBAF - RES 5, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBAF: subq.l #2,a5 ;less cycles.
and.b #%11011111,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B0 - OR B - [n = 0, h = 0, c = 0, z = x]
; MC680x0 CLEARS THE CARRY FLAG ITSELF!
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B0: ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
or.b d1,d3
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB0 - RES 6, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB0: subq.l #2,a5 ;less cycles.
and.w #%1011111111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B1 - OR C - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B1: subq.l #1,a5 ;less cycles.
or.b d1,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB1 - RES 6, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB1: subq.l #2,a5 ;less cycles.
and.b #%10111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B2 - OR D - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B2: ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
or.b d0,d3
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB2 - RES 6, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB2: subq.l #2,a5 ;less cycles.
and.w #%1011111111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B3 - OR E - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B3: subq.l #1,a5 ;less cycles.
or.b d0,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB3 - RES 6, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB3: subq.l #2,a5 ;less cycles.
and.b #%10111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B4 - OR H - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B4: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
or.b d2,d3
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB4 - RES 6, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB4: subq.l #2,a5 ;less cycles.
and.w #%1011111111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B5 - OR L - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B5: subq.l #1,a5 ;less cycles.
or.b d2,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB5 - RES 6, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB5: subq.l #2,a5 ;less cycles.
and.b #%10111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B6 - OR (HL) - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B6: subq.l #2,a5
tst.w d2
blt.s read_to_6
move.b (a3,d2.l),d6
or.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_6: move.b (a2,d2.l),d6
or.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB6 - RES 6, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB6: subq.l #4,a5 ;less cycles.
and.b #%10111111,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B7 - OR A - [n = 0, h = 0, c = 0, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B7: subq.l #1,a5 ;less cycles.
or.b d3,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB7 - RES 6, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB7: subq.l #2,a5 ;less cycles.
and.b #%10111111,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B8 - CP B - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B8: ror.w #8,d1 ;b down.
subq.l #1,a5 ;less cycles.
cmp.b d1,d3
move.w CCR,d4 ;status updated.
rol.w #8,d1 ;b back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB8 - RES 7, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB8: subq.l #2,a5 ;less cycles.
and.w #%0111111111111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; B9 - CP C - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_B9: subq.l #1,a5 ;less cycles.
cmp.b d1,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBB9 - RES 7, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBB9: subq.l #2,a5 ;less cycles.
and.b #%01111111,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; BA - CP D - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_BA: ror.w #8,d0 ;d down.
subq.l #1,a5 ;less cycles.
cmp.b d0,d3
move.w CCR,d4 ;status updated.
rol.w #8,d0 ;d back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBBA - RES 7, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBBA: subq.l #2,a5 ;less cycles.
and.w #%0111111111111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; BB - CP E - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_BB: subq.l #1,a5 ;less cycles.
cmp.b d0,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBBB - RES 7, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBBB: subq.l #2,a5 ;less cycles.
and.b #%01111111,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; BC - CP H - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_BC: ror.w #8,d2 ;h down.
subq.l #1,a5 ;less cycles.
cmp.b d2,d3
move.w CCR,d4 ;status updated.
rol.w #8,d2 ;h back to up.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBBC - RES 7, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBBC: subq.l #2,a5 ;less cycles.
and.w #%0111111111111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; BD - CP L - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_BD: subq.l #1,a5 ;less cycles.
cmp.b d2,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBBD - RES 7, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBBD: subq.l #2,a5 ;less cycles.
and.b #%01111111,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; BE - CP (HL) - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_BE: subq.l #2,a5
tst.w d2
blt.s read_to_7
move.b (a3,d2.l),d6
cmp.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,4
read_to_7: move.b (a2,d2.l),d6
cmp.b d6,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBBE - RES 7, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBBE: subq.l #4,a5 ;less cycles.
and.b #%01111111,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; BF - CP A - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_BF: subq.l #1,a5 ;less cycles.
cmp.b d3,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBBF - RES 7, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBBF: subq.l #2,a5 ;less cycles.
and.b #%01111111,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C0 - RET NZ
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C0: subq.l #2,a5
btst #2,d4 ;z - flag set?
bne.s z80_cpu_loop_c0 ;yes. it's zero.
move.w (a2,d5.l),d7
addq.w #2,d5
ror.w #8,d7
blt.s pc_in_ram_xi
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
z80_cpu_loop_c0:
fetch_next_i
cnop 0,4
pc_in_ram_xi: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC0 - SET 0, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC0: subq.l #2,a5 ;less cycles.
or.w #%0000000100000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C1 - POP BC
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C1: subq.l #3,a5 ;less cycles.
tst.w d5 ;rom read?
blt.s readw_d5_to_d1a ;nope. from ram!
move.w (a3,d5.l),d1
addq.w #2,d5 ;sp = sp + 2.
ror.w #8,d1 ;order correction.
fetch_next_i
cnop 0,4
readw_d5_to_d1a:move.w (a2,d5.l),d1 ;ram read.
addq.w #2,d5 ;sp = sp + 2.
ror.w #8,d1 ;order correction.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC1 - SET 0, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC1: subq.l #2,a5 ;less cycles.
or.b #%00000001,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C2 - JP NZ, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C2: btst #2,d4 ;z - flag set?
bne.s z80_optcode_C2x ;yes. it's zero.
move.w (a0),d7
subq.l #3,a5 ;less cycles.
ror.w #8,d7 ;pc updated.
blt.s pc_in_ram_i
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_i: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_C2x:addq.l #2,a0 ;no jump.
subq.l #3,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC2 - SET 0, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC2: subq.l #2,a5 ;less cycles.
or.w #%0000000100000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C3 - JP xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C3: move.w (a0),d7
subq.l #3,a5 ;less cycles.
ror.w #8,d7 ;pc updated.
blt.s pc_in_ram_ii
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_ii: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC3 - SET 0, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC3: subq.l #2,a5 ;less cycles.
or.b #%00000001,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C4 - CALL NZ, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C4: btst #2,d4 ;z - flag set?
bne.s z80_optcode_C4x ;yes. it's zero.
move.l a0,d6
sub.l z80_pc_base,d6
addq.w #2,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
move.w (a0),d7
subq.l #3,a5 ;less cycles.
ror.w #8,d7
blt.s pc_in_ram_vi
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_vi: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_C4x:addq.l #2,a0 ;no jump.
subq.l #3,a5 ;less cycles.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC4 - SET 0, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC4: subq.l #2,a5 ;less cycles.
or.w #%0000000100000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C5 - PUSH BC
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C5: move.w d1,d6
subq.l #4,a5 ;less cycles.
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC5 - SET 0, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC5: subq.l #2,a5 ;less cycles.
or.b #%00000001,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C6 - ADD x - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C6: subq.l #2,a5 ;less cycles.
add.b (a0)+,d3 ;a = a + x.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC6 - SET 0, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC6: subq.l #4,a5 ;less cycles.
or.b #%00000001,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C7 - RST 0
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C7: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
move.l a3,a0
subq.l #8,a5 ;less cycles.
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC7 - SET 0, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC7: subq.l #2,a5 ;less cycles.
or.b #%00000001,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C8 - RET Z
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C8: subq.l #2,a5
btst #2,d4 ;z - flag set?
beq.s z80_cpu_loop_c8 ;nope. it's non-zero.
move.w (a2,d5.l),d7
addq.w #2,d5
ror.w #8,d7
blt.s pc_in_ram_xii
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
z80_cpu_loop_c8:
fetch_next_i
cnop 0,4
pc_in_ram_xii: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC8 - SET 1, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC8: subq.l #2,a5 ;less cycles.
or.w #%0000001000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; C9 - RET
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_C9:
READW_D5_TO_D7
subq.l #2,a5
addq.w #2,d5
ror.w #8,d7
blt.s pc_in_ram_xvi
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_xvi: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBC9 - SET 1, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBC9: subq.l #2,a5 ;less cycles.
or.b #%00000010,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CA - JP Z, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_CA: btst #2,d4 ;z - flag set?
beq.s z80_optcode_CAx ;nope. it's non-zero.
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_iii
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_iii: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_CAx:addq.l #2,a0
subq.l #3,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBCA - SET 1, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBCA: subq.l #2,a5
or.w #%0000001000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CB - RLC, RL, SLA, SRL, BIT, RES and SET
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_CB: move.b (a0)+,d7
lsl.w #8,d7 ;d0 = d0*256.
jmp (a4,d7.l) ;jump and emulate.
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBCB - SET 1, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBCB: subq.l #2,a5 ;less cycles.
or.b #%00000010,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CC - CALL Z, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_CC: btst #2,d4 ;z - flag set?
beq.s z80_optcode_CCx ;nope. it's non-zero.
move.l a0,d6
sub.l z80_pc_base,d6
addq.w #2,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_vii
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_vii: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_CCx:addq.l #2,a0 ;no jump.
subq.l #3,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBCC - SET 1, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBCC: subq.l #2,a5 ;less cycles.
or.w #%0000001000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CD - CALL xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_CD: move.l a0,d6
sub.l z80_pc_base,d6
addq.w #2,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_viii
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_viii: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBCD - SET 1, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBCD: subq.l #2,a5 ;less cycles.
or.b #%00000010,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CE - ADC x - [n = 0, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_CE: btst #0,d4 ;c = 0?
beq.w z80_optcode_C6 ;yes. normal add.
move.b (a0)+,d6
subq.l #2,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
addx.b d6,d3 ;a = a + c + c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBCE - SET 1, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBCE: subq.l #4,a5 ;less cycles.
or.b #%00000010,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CF - RST 8
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_CF: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
lea $8(a3),a0
subq.l #8,a5 ;less cycles.
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBCF - SET 1, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBCF: subq.l #2,a5 ;less cycles.
or.b #%00000010,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D0 - RET NC
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D0: subq.l #2,a5
btst #0,d4 ;c - flag set?
bne.w z80_cpu_loop_d0 ;yes. no jump.
move.w (a2,d5.l),d7
addq.w #2,d5
ror.w #8,d7
blt.s pc_in_ram_xiii
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
z80_cpu_loop_d0:
fetch_next_i
cnop 0,4
pc_in_ram_xiii: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD0 - SET 2, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD0: subq.l #2,a5 ;less cycles.
or.w #%0000010000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D1 - POP DE
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D1: subq.l #3,a5 ;less cycles.
tst.w d5 ;rom read?
blt.s readw_d5_to_d0a ;nope. from ram!
move.w (a3,d5.l),d0
addq.w #2,d5 ;sp = sp + 2.
ror.w #8,d0 ;order correction.
fetch_next_i
cnop 0,4
readw_d5_to_d0a:move.w (a2,d5.l),d0 ;ram read.
addq.w #2,d5 ;sp = sp + 2.
ror.w #8,d0 ;order correction.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD1 - SET 2, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD1: subq.l #2,a5 ;less cycles.
or.b #%00000100,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D2 - JP NC, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D2: btst #0,d4 ;c - flag set?
bne.s z80_optcode_D2x ;yes. no jump.
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_iv
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_iv: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_D2x:addq.l #2,a0 ;no jump.
subq.l #3,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD2 - SET 2, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD2: subq.l #2,a5 ;less cycles.
or.w #%0000010000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D3 - DB $D3 ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D3: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD3 - SET 2, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD3: subq.l #2,a5 ;less cycles.
or.b #%00000100,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D4 - CALL NC, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D4: btst #0,d4 ;c - flag set?
bne.s z80_optcode_D4x ;yes. no jump.
move.l a0,d6
sub.l z80_pc_base,d6
addq.w #2,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_ix
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_ix: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_D4x:addq.l #2,a0 ;no jump.
subq.l #3,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD4 - SET 2, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD4: subq.l #2,a5 ;less cycles.
or.w #%0000010000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D5 - PUSH DE
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D5: move.w d0,d6
subq.l #4,a5 ;less cycles.
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD5 - SET 2, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD5: subq.l #2,a5 ;less cycles.
or.b #%00000100,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D6 - SUB x - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D6: subq.l #2,a5 ;less cycles.
sub.b (a0)+,d3 ;a = a - x.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD6 - SET 2, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD6: subq.l #4,a5 ;less cycles.
or.b #%00000100,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D7 - RST 10h
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D7: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
lea $10(a3),a0
subq.l #8,a5 ;less cycles.
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD7 - SET 2, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD7: subq.l #2,a5 ;less cycles.
or.b #%00000100,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D8 - RET C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D8: subq.l #2,a5
btst #0,d4 ;c - flag set?
beq.s z80_cpu_loop_d8 ;no. no return.
move.w (a2,d5.l),d7
addq.w #2,d5
ror.w #8,d7
blt.s pc_in_ram_xiv
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
z80_cpu_loop_d8:
fetch_next_i
cnop 0,4
pc_in_ram_xiv: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD8 - SET 3, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD8: subq.l #2,a5 ;less cycles.
or.w #%0000100000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; D9 - RETI
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_D9: subq.l #2,a5 ;less cycles.
clr.b i_flag ;enable interrupts.
move.w (a2,d5.l),d7
addq.w #2,d5
ror.w #8,d7
blt.s pc_in_ram_xv
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
bra.w reti_back
cnop 0,4
pc_in_ram_xv: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
bra.w reti_back
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBD9 - SET 3, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBD9: subq.l #2,a5 ;less cycles.
or.b #%00001000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; DA - JP C, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_DA: btst #0,d4 ;c - flag set?
beq.s z80_optcode_DAx ;no. no jump.
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_v
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_v: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_DAx:addq.l #2,a0 ;no jump.
subq.l #3,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBDA - SET 3, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBDA: subq.l #2,a5 ;less cycles.
or.w #%0000100000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; DB - DB $DB ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_DB: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBDB - SET 3, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBDB: subq.l #2,a5 ;less cycles.
or.b #%00001000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; DC - CALL C, xx
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_DC: btst #0,d4 ;c - flag set?
beq.s z80_optcode_DCx ;no. no jump.
move.l a0,d6
sub.l z80_pc_base,d6
addq.w #2,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
move.w (a0),d7
subq.l #3,a5
ror.w #8,d7
blt.s pc_in_ram_x
move.l a3,z80_pc_base ;rom base.
lea (a3,d7.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_x: move.l a2,z80_pc_base ;ram base.
lea (a2,d7.l),a0
fetch_next_i
cnop 0,4
z80_optcode_DCx:addq.l #2,a0 ;no jump.
subq.l #3,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBDC - SET 3, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBDC: subq.l #2,a5 ;less cycles.
or.w #%0000100000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; DD - DB $DD
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_DD: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBDD - SET 3, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBDD: subq.l #2,a5 ;less cycles.
or.b #%00001000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; DE - SBC x - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_DE: btst #0,d4 ;c = 0?
beq.w z80_optcode_D6 ;yes. normal sub.
move.b (a0)+,d6
subq.l #2,a5 ;less cycles.
move.w #%10000,CCR ;x = 1!
subx.b d6,d3 ;a = a - d - c.
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBDE - SET 3, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBDE: subq.l #4,a5 ;less cycles.
or.b #%00001000,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; DF - RST 18h
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_DF: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
lea $18(a3),a0
subq.l #8,a5 ;less cycles.
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBDF - SET 3, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBDF: subq.l #2,a5
or.b #%00001000,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E0 - LD ($FF00+x), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E0: move.l gb_mem_jumps,a6
move.w #$ff00,d7 ;custom registers.
subq.l #3,a5
move.b (a0)+,d7
move.b d3,d6
jsr ([a6,d7.l*4])
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE0 - SET 4, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE0: subq.l #2,a5
or.w #%0001000000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E1 - POP HL
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E1: subq.l #3,a5
tst.w d5 ;rom read?
blt.s readw_d5_to_d2a ;nope. from ram!
move.w (a3,d5.l),d2
ror.w #8,d2 ;order correction.
addq.w #2,d5 ;sp = sp + 2.
fetch_next_i
cnop 0,4
readw_d5_to_d2a:move.w (a2,d5.l),d2 ;ram read.
ror.w #8,d2 ;order correction.
addq.w #2,d5 ;sp = sp + 2.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE1 - SET 4, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE1: subq.l #2,a5
or.b #%00010000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E2 - LD ($FF00+C), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E2: move.l gb_mem_jumps,a6
move.w #$ff00,d7
subq.l #2,a5
move.b d1,d7
move.b d3,d6
jsr ([a6,d7.l*4])
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE2 - SET 4, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE2: subq.l #2,a5
or.w #%0001000000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E3 - EX HL, (SP) ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E3: move.w (a2,d5.l),d7
ror.w #8,d2
ror.w #8,d7
move.w d2,(a2,d5.l)
move.w d7,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE3 - SET 4, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE3: subq.l #2,a5
or.b #%00010000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E4 - DB $E4 ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E4: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE4 - SET 4, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE4: subq.l #2,a5
or.w #%0001000000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E5 - PUSH HL
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E5: move.w d2,d6
subq.l #4,a5
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE5 - SET 4, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE5: subq.l #2,a5
or.b #%00010000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E6 - AND x - [n = 0, h = 1, c = 0, z = x]
; MC680x0 CLEARS THE CARRY FLAG ITSELF!
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E6: subq.l #2,a5
and.b (a0)+,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE6 - SET 4, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE6: subq.l #4,a5 ;less cycles.
or.b #%00010000,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E7 - RST 20h
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E7: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
lea $20(a3),a0
subq.l #8,a5 ;less cycles.
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE7 - SET 4, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE7: subq.l #2,a5 ;less cycles.
or.b #%00010000,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E8 - ADD SP, x - [n = 0, h = x, c = x, z = 0]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E8: move.b (a0)+,d7
ext.w d7
subq.l #4,a5
add.w d7,d5
move.w CCR,d4
and.b #%1,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE8 - SET 5, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE8: subq.l #2,a5 ;less cycles.
or.w #%0010000000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; E9 - LD PC, HL
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_E9: subq.l #1,a5 ;less cycles.
tst.w d2
blt.s pc_in_ram_xvii
move.l a3,z80_pc_base ;rom base.
lea (a3,d2.l),a0
fetch_next_i
cnop 0,4
pc_in_ram_xvii: move.l a2,z80_pc_base ;ram base.
lea (a2,d2.l),a0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBE9 - SET 5, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBE9: subq.l #2,a5 ;less cycles.
or.b #%00100000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; EA - LD (xx), A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_EA: move.w (a0)+,d7
subq.l #4,a5
ror.w #8,d7
move.l gb_mem_jumps,a6
move.b d3,d6
jsr ([a6,d7.l*4])
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBEA - SET 5, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBEA: subq.l #2,a5
or.w #%0010000000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; EB - DB $EB ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_EB: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBEB - SET 5, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBEB: subq.l #2,a5 ;less cycles.
or.b #%00100000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; EC - DB $EC ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_EC: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBEC - SET 5, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBEC: subq.l #2,a5 ;less cycles.
or.w #%0010000000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; ED - PREFIX $ED ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_ED: bchg.b #1,$bfe001
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBED - SET 5, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBED: subq.l #2,a5 ;less cycles.
or.b #%00100000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; EE - XOR x - [n = 0, h = 0, c = 0, z = x]
; MC680x0 CLEARS THE CARRY FLAG ITSELF!
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_EE: move.b (a0)+,d7
subq.l #2,a5 ;less cycles.
eor.b d7,d3
move.w CCR,d4 ;status updated.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBEE - SET 5, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBEE: subq.l #4,a5 ;less cycles.
or.b #%00100000,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; EF - RST 28h
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_EF: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
lea $28(a3),a0
subq.l #8,a5 ;less cycles.
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBEF - SET 5, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBEF: subq.l #2,a5 ;less cycles.
or.b #%00100000,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F0 - LD A, ($FF00+x)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F0: move.w #$ff00,d7
move.b (a0)+,d7
subq.l #3,a5
move.b (a2,d7.l),d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF0 - SET 6, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF0: subq.l #2,a5
or.w #%0100000000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F1 - POP AF
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F1: subq.l #3,a5 ;less cycles.
READW_D5_TO_D7
move.b d7,d3 ;a returned.
addq.w #2,d5
lsr.w #8,d7 ;d7 = f.B (znhc0000).
move.b d7,d6
lsr.b #4,d7 ;d7 = f.B (0000znhc).
move.b d7,d4
and.b #1,d4 ;d4 = 0000000c.
lsr.b #1,d7 ;d7 = 00000znh.
and.b #%100,d7
or.b d7,d4 ;d4 = mc680x0 flags.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF1 - SET 6, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF1: subq.l #2,a5 ;less cycles.
or.b #%01000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F2 - LD A, ($FF00+C)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F2: move.w #$ff00,d7
subq.l #2,a5
move.b d1,d7
move.b (a2,d7.l),d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF2 - SET 6, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF2: subq.l #2,a5 ;less cycles.
or.w #%0100000000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F3 - DI (disable interrupts)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F3: subq.l #1,a5 ;less cycles.
move.b #1,i_flag ;no interrupts.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF3 - SET 6, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF3: subq.l #2,a5 ;less cycles.
or.b #%01000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F4 - DB $F4 ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F4: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF4 - SET 6, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF4: subq.l #2,a5 ;less cycles.
or.w #%0100000000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F5 - PUSH AF
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F5: move.b d4,d6 ;d6 = f.B (000xnzvc).
lsl.b #4,d6 ;d6 = (nzvc0000).
move.b d6,d7
and.b #%00010000,d7 ;d7 = (000c0000).
lsl.b #1,d6 ;d6 = (zvc00000).
and.b #%10000000,d6 ;d6 = (z0000000).
or.b d7,d6 ;d6 = (z00c0000).
;d6 = af.
lsl.w #8,d6
move.b d3,d6
subq.w #2,d5
subq.l #4,a5
move.w d6,(a2,d5.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF5 - SET 6, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF5: subq.l #2,a5 ;less cycles.
or.b #%01000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F6 - OR x - [n = 0, h = 0, c = 0, z = x]
; MC680x0 CLEARS THE CARRY FLAG ITSELF!
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F6: subq.l #2,a5
or.b (a0)+,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF6 - SET 6, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF6: subq.l #4,a5 ;less cycles.
or.b #%01000000,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F7 - RST 30h
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F7: move.l a0,d6
subq.w #2,d5
sub.l z80_pc_base,d6
ror.w #8,d6
move.w d6,(a2,d5.l)
lea $30(a3),a0
subq.l #8,a5
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF7 - SET 6, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF7: subq.l #2,a5 ;less cycles.
or.b #%01000000,d3
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F8 - LD HL, SP+x - [n = 0, h = x, c = x, z = 0]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F8: move.b (a0)+,d7
move.w d5,d2
ext.w d7
add.w d7,d2
move.w CCR,d4
subq.l #3,a5 ;?
and.b #%1,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF8 - SET 7, B
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF8: subq.l #2,a5 ;less cycles.
or.w #%1000000000000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; F9 - LD SP, HL
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_F9: move.w d2,d5
subq.l #2,a5
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBF9 - SET 7, C
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBF9: subq.l #2,a5 ;less cycles.
or.b #%10000000,d1
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; FA - LD A, (xx)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_FA: move.w (a0)+,d7
subq.l #4,a5
ror.w #8,d7
blt.s read_d7_to_d3a
move.b (a3,d7.l),d3 ;rom.
fetch_next_i
cnop 0,4
read_d7_to_d3a: move.b (a2,d7.l),d3 ;ram.
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBFA - SET 7, D
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBFA: subq.l #2,a5 ;less cycles.
or.w #%1000000000000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; FB - EI (enable interrupts)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_FB: subq.l #1,a5
clr.b i_flag ;interrupts enabled.
bra.w reti_back
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBFB - SET 7, E
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBFB: subq.l #2,a5 ;less cycles.
or.b #%10000000,d0
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; FC - DB $FC ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_FC: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBFC - SET 7, H
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBFC: subq.l #2,a5 ;less cycles.
or.w #%1000000000000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; FD - DB $FD ???
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_FD: fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBFD - SET 7, L
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBFD: subq.l #2,a5 ;less cycles.
or.b #%10000000,d2
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; FE - CP x - [n = 1, h = x, c = x, z = x]
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_FE: subq.l #2,a5
cmp.b (a0)+,d3
move.w CCR,d4
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBFE - SET 7, (HL)
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBFE: subq.l #4,a5 ;less cycles.
or.b #%10000000,(a2,d2.l)
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; FF - RST 38h
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optcode_FF: move.l a0,d6
sub.l z80_pc_base,d6
ror.w #8,d6
subq.w #2,d5
move.w d6,(a2,d5.l)
lea $38(a3),a0
subq.l #8,a5
move.l a3,z80_pc_base
fetch_next_i
cnop 0,128
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
; CBFF - SET 7, A
;««««««««««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
z80_optc_CBFF: subq.l #2,a5 ;less cycles.
or.b #%10000000,d3
fetch_next_i
cnop 0,128